[GOV-OBS-012] Внедрить структурированное JSON-логирование для ClickHouse
Перевод stdout шлюза на JSON Lines для интеграции с Vector и ClickHouse
NoteКраткая карточка задачи
- Репозиторий / Компонент:
gov-registry-gateway(Go / SOAP Ingress). - Тип задачи: Инфраструктурная / Обсервабилити (Observability).
- Справочник ошибок: [Раздел 5. Справочник ошибок технической документации]
- Статус: Готово к реализации
Описание задачи:
Для обеспечения сквозного мониторинга (Observability) работы сервиса Gov Registry Gateway, анализа качества интеграции и автоматического сбора аналитики в ClickHouse, необходимо перевести стандартный вывод логов (stdout) на структурированный формат JSON. Логи будут подхватываться агентом сбора логов (Vector/Fluentbit) прямо из контейнера, поэтому в коде не должно быть никакой текстовой примеси.
Инструкция по шагам:
- Удаление текстовых логов: Полностью удалить из кодовой базы стандартные вызовы
log.Printlnиlog.Fatalfпосле инициализации БД. Логирование вos.Stdoutдолжно содержать строго одну валидную JSON-строку на одно событие (формат JSON Lines). - Подключение логгера: Интегрировать структурированный логгер (рекомендуется встроенный
slogиз Go 1.21+ илиuber-go/zap). Текстовые примеси в потоке вывода запрещены, так как они ломают сборщик логов Vector. - Формирование базовых полей: Настроить автоматическую генерацию полей для каждого события:
timestamp(в формате RFC3339 Nano),level(INFO,WARN,ERROR,FATAL) иui_payload(для данного сервиса всегда передаватьnull). - Реализация логирования бизнес-ошибок (На Шаге 7 и Шаге 13): При возникновении нештатных ситуаций или отказов авторизации, формировать корневое поле
canonical_codeи вложенный объектobservability_jsonв точном соответствии со справочником ошибок:- При невалидном/отозванном токене:
canonical_code: "GOV_AUTH_DENIED", вtransport_statusesпередавать{"grpc": 16, "http": 401}, а вobservability_json.labelsуказывать причинуtoken_invalid_or_revoked. - При отсутствии записи в реестре:
canonical_code: "DB_EMPLOYEE_NOT_FOUND", вtransport_statusesпередавать{"grpc": 5, "http": 200}, а в метрику отправлять ярлыкuser_id_absent.
- При невалидном/отозванном токене:
- Логирование критических сбоев СУБД: В блоке обработки системных ошибок соединения с PostgreSQL формировать лог с уровнем
FATAL, кодомDB_GOV_POSTGRES_DOWN, статусами{"grpc": 14, "http": 500}и таргетомINTERNAL_SYSTEM. Внутри меток ClickHouse передавать точное имя базы данныхgov_registry_db. - Логирование успешных запросов (На Шаге 15): При успешной отдаче персональных данных сотрудника формировать лог со значением
canonical_code: "SUCCESS", уровнемINFOи статусами{"grpc": null, "http": 200}.
- Удаление текстовых логов: Полностью удалить из кодовой базы стандартные вызовы